﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Lilium.Web.Mvc.Security
{
    //TODO: это не совсем ActionContext, т.к. не содержит контекстной информации, пока я не могу придумать нормального названия.
    //возможно стоит переименовать в ActionContextBase или что-то в этом роде, т.к. этот класс используется как база для настоящих контекстов.
    public class ActionContext
    {
        public ActionContext(ActionContext actionContext)
        {
            if (actionContext == null) throw new ArgumentNullException("actionContext");

            m_Action = actionContext.Action;
            m_Area = actionContext.Area;
            m_Controller = actionContext.Controller;
            m_RouteValues = new Dictionary<string, object>(actionContext.RouteValues);
            m_UserValues = new Dictionary<string, object>(actionContext.UserValues);
        }

        public ActionContext(string area, string contoller, string action, IDictionary<string, object> routeValues)
        {
            m_Action = action;
            m_Area = area;
            m_Controller = contoller;
            m_RouteValues = new Dictionary<string, object>(routeValues);
            m_UserValues = new Dictionary<string, object>();
        }

        #region public string Area

        private readonly string m_Area;

        public string Area
        {
            get
            {
                return m_Area;
            }
        }

        #endregion

        #region public string Action

        private readonly string m_Action;

        public string Action
        {
            get
            {
                return m_Action;
            }
        }

        #endregion

        #region public string Controller

        private readonly string m_Controller;

        public string Controller
        {
            get
            {
                return m_Controller;
            }
        }

        #endregion

        #region public IDictionary<string, object> RouteValues

        private readonly IDictionary<string, object> m_RouteValues;

        public IDictionary<string, object> RouteValues
        {
            get
            {
                return m_RouteValues;
            }
        }

        #endregion

        #region public IDictionary<string, object> UserValues

        private readonly IDictionary<string, object> m_UserValues;

        public IDictionary<string, object> UserValues
        {
            get
            {
                return m_UserValues;
            }
        }

        #endregion
    }
}